package com.boss.salary.dao;

import com.boss.framework.dto.PaginationDTO;
import com.boss.salary.entity.AgencyVerify;
import com.boss.salary.entity.SalaryPaymentRequisitionBack;
import com.boss.salary.entity.SalaryPaymentTicket;
import com.boss.salary.entity.SalaryWarnMonth;
import com.boss.salary.vo.SalaryDataVo;

import java.util.List;
import java.util.Map;

public interface IGenerateSalaryDataDao {

    /**
     * 查询工资的列表数据
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    List<SalaryDataVo> queryGenerateSalaryDataPage(PaginationDTO paginationDTO,  Map<String, Object> queryParam, List<String> childrenId,List<String> bizKeys);

    /**
     * 查询工资的列表数据总数量
     * @param queryParam
     * @return
     */
    int queryGenerateSalaryDataTotal(Map<String, Object> queryParam, List<String> childrenId,List<String> bizKeys);

    /**
     * 查询工资的列表数据合计值
     * @param queryParam
     * @return
     */
    SalaryDataVo queryGenerateSalaryTotal(Map<String, Object> queryParam, List<String> childrenId,List<String>bizKeys);

    /**
     * 获取所有公司的人员工资数据
     * @return
     */
    List<Map<String, Object>> getPersonSalary(List<String> operateAgencyIds);

    /**
     * 获取除实发外其它的工资项
     * @param agencyId
     * @param columnName
     * @return
     */
    List<Map<String, Object>> getPersonOtherSalary(String agencyId, List<String> columnName);

    /**
     * 获取有收款账户的工资字段
     * @param operateAgencyIds
     * @return
     */
    List<Map<String, Object>> getPayeeColumnName(List<String> operateAgencyIds);
    /**
     * 获取单位的工资数据
     * @return
     */
    List<Map<String, Object>> getAgencyPayData(String isPayData, List<String> operateAgencyIds);

    /**
     * 根据单位id修改生成状态
     * @param agencyId
     */
    void updatePayData(String agencyId, String payFlag);

    /**
     * 根据单位ids修改生成状态
     * @param agencyId
     */
    void updatePayDatas(List<String> agencyId, String payFlag,String paymentCreateTime);

    /**
     * 保存支付回单数据
     * @param salaryPaymentRequisitionBack
     */
    void insertPayBackData(SalaryPaymentRequisitionBack salaryPaymentRequisitionBack);

    /**
     * 保存支付回单数据
     * @param salaryPaymentRequisitionBack
     */
    void batchInsertPayBackData(List<SalaryPaymentRequisitionBack> salaryPaymentRequisitionBack);

    /**
     * 删除支付回单数据
     * @param salaryPaymentRequisitionBack
     */
    void deletePayBackData(SalaryPaymentRequisitionBack salaryPaymentRequisitionBack);

    /**
     * 删除支付回单数据
     * @param agencyId
     */
    void deletePayBackData(String  agencyId);

    /**
     * 获取所有支付回单数据
     * @param queryParam
     * @return
     */
    List<SalaryPaymentRequisitionBack> getPayBackData(Map<String, Object> queryParam);

    /**
     * 获取可撤销的支付回单数据
     * @return
     */
    List<Map<String, Object>> getRevokePayBackData(List<String> operateAgencyIds);

    /**
     * 获取单位银行上传状态
     * @return
     */
    List<AgencyVerify> getBankDataStatus(List<String> agencyIds);


    /**
     * 获取除实发外其它的工资项--上报校验指标用
     * @param agencyId
     * @param columnName
     * @return
     */
    List<Map<String, Object>> isPaymentEnough(String agencyId, List<String> columnName);

    /**
     * 获取工资项*校验月份数--上报校验指标用
     * @param agencyId
     * @param columnName
     * @return
     */
    List<Map<String, Object>> isMonthsPaymentEnough(String agencyId, List<String> columnName,String months);

    /**
     * 判断所传单位是否所有人员类型都挂接了指标
     * @param agencyIds
     * @return
     */
    List<Map<String, Object>> isPaymentAllConnectPersonType(List<String> agencyIds);

    /**
     * 判断所传单位是否所有人员类型都挂接了指标工资项收款户
     * @param agencyIds
     * @return
     */
    List<Map<String, Object>> isSalaryAllConnectPersonType(List<String> agencyIds);
    /**
     * 判断所传单位查询工资类型
     * @param agencyIds
     * @return
     */
    List<Map<String,Object>> getPersonType(List<String> agencyIds);


    /**新生成支付方法调取20210426新增 */
    /**
     * 获取挂接指标的工资项（按区划分）
     * @param province
     * @return
     */
    List<String> getPayeeColumnName(String province);

    /**
     * 查询所有选中单位的工资汇总
     * @param agencyIds
     * @param columnName
     * @param is_agency 是否是单位检验
     * @return
     */
    List<Map<String, Object>> getPersonOtherSalary(List<String> agencyIds, List<String> columnName,boolean is_agency);
    /**新生成支付方法调取20210426新增 */



    void deleteBatchPayBack(List<SalaryPaymentTicket> salaryPaymentTickets,String mofDivCode);

    List<Map<String, Object>> getPersonOtherSalarys(List<String> agencyIds, List<String> columnList, boolean is_agency, SalaryWarnMonth salaryWarnMonth);
}
